home *** CD-ROM | disk | FTP | other *** search
/ 130 MIDI Tool Box / 130 MIDI Tool Box.iso / driver / midio.asm < prev    next >
Assembly Source File  |  1987-05-07  |  3KB  |  150 lines

  1. PAGE 56,132
  2. TITLE    MIDIO    PERFORM DIRECT DOS CALLS FOR C86 C MAIN PROGRAMS
  3. ;   (c) Copyright 1984 by The Computer Entomologist
  4. ;
  5. ;    Permission is hearby granted to use or distribute this software
  6. ;without any restrictions.  You may make copies for yourself or your
  7. ;friends. You may include it in any hardware or software product that you
  8. ;sell for profit.
  9. ;
  10. ;    This software is distributed as is, and is not guaranteed to work
  11. ;on any particular hardware/software configuration.  Furthermore, no 
  12. ;liability is granted with this software: the user takes responcibility for
  13. ;any damage this software may do to his system.
  14. ;
  15. ;    Nasy notices aside, if you have any questions about this software, you
  16. ;can reach me at the address below.  If you impliment any new features or
  17. ;find (and fix!) any bugs, I would be happy to hear from you.
  18. ;
  19. ;    Mike Higgins
  20. ;    The Computer Entomologist
  21. ;    P.O. Box 197
  22. ;    Duncans Mills, CA 95430
  23.  
  24.  
  25. INCLUDE    CODE
  26.  
  27.     PUBLIC    _MOPEN
  28. _MOPEN    PROC    NEAR    ;INT=MOPEN(NAME);
  29. NAME=4
  30.  
  31.     PUSH    BP        ;DO THE NORMAL C LINKAGE
  32.     MOV    BP,SP
  33.  
  34.     MOV    DX,NAME[BP]        ;GET NAME OF DEVICE TO OPEN
  35.     MOV    AX,03D02H        ;OPEN IT FOR READ/WRITE.
  36.     INT    021H            ;WELL, CAN DOS DO IT?
  37.     JC    OPENERR            ;CHECK FOR ERROR
  38.     MOV    BX,AX            ;SET UP TO DO AN IOCTL CALL
  39.     MOV    AX,04400H        ;GET DEVICE INFO
  40.     INT    021H
  41.     OR    DL,020H            ;SET THE "RAW" BIT, AND
  42.     MOV    DH,0            ;CLEAR UPPER BITS
  43.     MOV    AX,04401H        ;WRITE IT BACK OUT
  44.     INT    021H
  45.  
  46.     MOV    AX,BX            ;RETURN THE HANDLE
  47. OPENDONE:
  48.     POP    BP            ;RECOVER BP
  49.     RET                ;RETURN TO C
  50. OPENERR:
  51.     OR    AH,080H            ;MAKE AX NEGATIVE
  52.     JMP    OPENDONE
  53.  
  54. _MOPEN    ENDP
  55.  
  56.     PUBLIC    _MCLOSE
  57. _MCLOSE    PROC    NEAR    ;MCLOSE(HANDLE);
  58. HAND=4
  59.     PUSH    BP
  60.     MOV    BP,SP
  61.  
  62.     MOV    BX,HAND[BP]    ;GET FILE HANDLE
  63.     MOV    AH,03EH
  64.     INT    021H        ;CLOSE FILE
  65.  
  66.     POP    BP
  67.     RET
  68.  
  69. _MCLOSE    ENDP
  70.  
  71.     PUBLIC    _MREAD
  72. _MREAD    PROC    NEAR    ;SIZE=MREAD(BUF,SIZE,HAND);
  73. BUF=4
  74. SIZE=6
  75. HAND=8
  76.     PUSH    BP
  77.     MOV    BP,SP
  78.  
  79.     MOV    DX,BUF[BP]    ;GET BUFFER ADDRESS
  80.     MOV    CX,SIZE[BP]    ;AND LENGTH
  81.     MOV    BX,HAND[BP]    ;GET FILE HANDLE
  82.     MOV    AH,03FH        ;SET UP TO DO A READ
  83.     INT    021H
  84.     JNC    RDONE        ;CHECK FOR ERROR
  85.     OR    AH,080H        ;MAKE NEGATIVE FOR ERROR
  86. RDONE:
  87.     POP    BP
  88.     RET
  89.  
  90. _MREAD    ENDP
  91.  
  92.     PUBLIC    _MWRITE
  93. _MWRITE    PROC    NEAR    ;SIZE=MWRITE(BUF,SIZE,HAND);
  94.  
  95.     PUSH    BP
  96.     MOV    BP,SP
  97.  
  98.     MOV    DX,BUF[BP]    ;GET BUFFER ADDRESS
  99.     MOV    CX,SIZE[BP]    ;AND LENGTH
  100.     MOV    BX,HAND[BP]    ;GET FILE HANDLE
  101.     MOV    AH,040H        ;SET UP TO DO A WRITE
  102.     INT    021H
  103.  
  104.     POP    BP
  105.     RET
  106.  
  107. _MWRITE    ENDP
  108.  
  109.     PUBLIC    _MIOCTLR        ;DO I/O CONTROL READ
  110. _MIOCTLR    PROC    NEAR    ;ERR=MIOCTLR(BUF,LEN,HAND);
  111.  
  112.     PUSH    BP        ;DO THE NORMAL C LINKAGE
  113.     MOV    BP,SP
  114.  
  115.     MOV    BX,HAND[BP]        ;STORE HANDLE IN BX
  116.     MOV    DX,BUF[BP]        ;GET BUFFER ADDRESS
  117.     MOV    CX,SIZE[BP]        ;AND LENGTH.
  118.     MOV    AX,04402H        ;TELL DOS THIS IS IOCTL CALL READ
  119.     INT    021H            ;WAKE UP DOS.
  120.     JNC    IORDONE            ;CHECK FOR ERROR
  121.     OR    AH,080H            ;RETURN ERROR NEGATIVE
  122. IORDONE:
  123.     POP    BP            ;RECOVER BP
  124.     RET                ;RETURN TO C
  125.  
  126. _MIOCTLR    ENDP
  127.  
  128.     PUBLIC    _MIOCTLW        ;DO I/O CONTROL WRITE
  129. _MIOCTLW    PROC    NEAR    ;ERR=MIOCTLW(BUF,LEN,HAND);
  130.  
  131.     PUSH    BP        ;DO THE NORMAL C LINKAGE
  132.     MOV    BP,SP
  133.  
  134.     MOV    BX,HAND[BP]        ;STORE HANDLE IN BX
  135.     MOV    DX,BUF[BP]        ;GET BUFFER ADDRESS
  136.     MOV    CX,SIZE[BP]        ;AND LENGTH.
  137.     MOV    AX,04403H        ;TELL DOS THIS IS IOCTL CALL WRITE
  138.     INT    021H            ;WAKE UP DOS.
  139.     JNC    IOWDONE            ;CHECK FOR ERROR
  140.     OR    AH,080H            ;RETURN ERROR NEGATIVE
  141. IOWDONE:
  142.     POP    BP            ;RECOVER BP
  143.     RET                ;RETURN TO C
  144.  
  145. _MIOCTLW    ENDP
  146.  
  147. INCLUDE ENDCODE
  148.  
  149.     END
  150.